/****************************************************************************
**
** WX公众号:Qt历险记
** CSDN:Qt魔术师
**
****************************************************************************/

#ifndef THEMEWIDGET_H
#define THEMEWIDGET_H

#include <QtWidgets/QWidget>
#include <QtCharts/QChartGlobal>

// 学习：自己写项目时，仿照官方的文档格式,写出来的代码经得住折腾

QT_BEGIN_NAMESPACE
class QComboBox;
class QCheckBox;
class Ui_ThemeWidgetForm;
QT_END_NAMESPACE

QT_CHARTS_BEGIN_NAMESPACE
class QChartView;
class QChart;
QT_CHARTS_END_NAMESPACE

typedef QPair<QPointF, QString> Data;   // 存储单个数据

typedef QList<Data> DataList;           // 存储数据集合
typedef QList<DataList> DataTable;      // 存储数据链表

QT_CHARTS_USE_NAMESPACE

class ThemeWidget: public QWidget
{
    Q_OBJECT
public:
    explicit ThemeWidget(QWidget *parent = 0);  // 基于QWidget的界面设计
    ~ThemeWidget();

// 私有槽函数 只能当前类内使用 适合当前源文件之间的信号与槽通信
private Q_SLOTS:
    void updateUI();

// 私有成员函数和私有变量  当前源文件只用的函数和变量  不希望子类可以访问（安全）
private:
    DataTable generateRandomData(int listCount, int valueMax, int valueCount) const;    // 返回数据链表
    void populateThemeBox();            // 填充主题框
    void populateAnimationBox();        // 填充动画框
    void populateLegendBox();           // 填充图例框
    void connectSignals();              // 连接信号
    QChart *createAreaChart() const;                // 创建区域图表
    QChart *createBarChart(int valueCount) const;   // 创建条形图
    QChart *createPieChart() const;                 // 创建饼图
    QChart *createLineChart() const;                // 创建线形图
    QChart *createSplineChart() const;              // 创建样条曲线图
    QChart *createScatterChart() const;             // 创建散射图

private:
    int m_listCount;
    int m_valueMax;
    int m_valueCount;
    QList<QChartView *> m_charts;   // 存储多个视图
    DataTable m_dataTable;          // 数据链表对象

    Ui_ThemeWidgetForm *m_ui;       // ui指针
};

#endif /* THEMEWIDGET_H */
